package leetcode.code0396;

import leetcode.IDebug;
import leetcode.helper.HelpDebug;

public class Solution396 implements IDebug {

	public int maxRotateFunction(int[] nums) {
		int sum = 0;// 数组累加和, 每次向右旋转增加的数量是 `sum - 当时得最后一位数字`
		int fx = 0;
		int len = nums.length;
		for (int i = 0; i < len; i++) {
			sum += nums[i]; // 数组累加和
			fx += nums[i] * i;// 数组的f(0)
		}
		int max = fx;// 初始设f0最大
		for (int i = len - 1; i >= 0; i--) {
			// 用i从右向左移动, 假装数组整体向右旋转, i指向最后一位(最大位)
			// i = len - 1 初始指向f0的最大倍数位置,一次旋转减少len-1倍个当前位置,增加sum - nums[i]
			// i位置是最大倍数位, 转成0了 , 所以 fx - (len-1)*nums[i]
			// 整体向右移动一次,增加一倍sum - nums[i] ,所以 旋转后 fx - (len-1)*nums[i] + sum - nums[i]
			fx = fx - len * nums[i] + sum;// == fx - (len-1)*nums[i] + sum - nums[i]
			max = Math.max(max, fx); // 这之中最大的是答案
		}
		return max;
	}

	@Override
	public void debug1() {
		String str = "[4, 3, 2, 6]";
		int[] nums = HelpDebug.str2array3(str);
		int e = 26;
		int r = this.maxRotateFunction(nums);
		HelpDebug.compare(e, r);

	}

	@Override
	public void debug2() {
		// TODO Auto-generated method stub

	}

	@Override
	public void debug3() {
		// TODO Auto-generated method stub

	}

	@Override
	public void debug4() {
		// TODO Auto-generated method stub

	}

	public static void main(String[] args) {
		Solution396 so = new Solution396();
		so.debug1();
	}

}
